GtkListView *self = GTK_LIST_VIEW (base);
GtkWidget *result;
- result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager),
+ result = gtk_list_item_widget_new (self->factory,
"row",
GTK_ACCESSIBLE_ROLE_ROW);
GtkListBase parent_instance;
GtkListItemManager *item_manager;
+ GtkListItemFactory *factory;
guint min_columns;
guint max_columns;
gboolean single_click_activate;
GtkGridView *self = GTK_GRID_VIEW (base);
GtkWidget *result;
- result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager),
+ result = gtk_list_item_widget_new (self->factory,
"child",
GTK_ACCESSIBLE_ROLE_GRID_CELL);
switch (property_id)
{
case PROP_FACTORY:
- g_value_set_object (value, gtk_list_item_manager_get_factory (self->item_manager));
+ g_value_set_object (value, self->factory);
break;
case PROP_MAX_COLUMNS:
{
g_return_val_if_fail (GTK_IS_GRID_VIEW (self), NULL);
- return gtk_list_item_manager_get_factory (self->item_manager);
+ return self->factory;
}
/**
gtk_grid_view_set_factory (GtkGridView *self,
GtkListItemFactory *factory)
{
+ GtkListTile *tile;
+
g_return_if_fail (GTK_IS_GRID_VIEW (self));
g_return_if_fail (factory == NULL || GTK_IS_LIST_ITEM_FACTORY (factory));
- if (factory == gtk_list_item_manager_get_factory (self->item_manager))
+ if (!g_set_object (&self->factory, factory))
return;
- gtk_list_item_manager_set_factory (self->item_manager, factory);
+ for (tile = gtk_list_item_manager_get_first (self->item_manager);
+ tile != NULL;
+ tile = gtk_rb_tree_node_get_next (tile))
+ {
+ if (tile->widget)
+ gtk_list_item_widget_set_factory (GTK_LIST_ITEM_WIDGET (tile->widget), factory);
+ }
+
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]);
}
GtkWidget *widget;
GtkSelectionModel *model;
- GtkListItemFactory *factory;
GtkRbTree *items;
GSList *trackers;
gtk_list_item_manager_clear_model (self);
- g_clear_object (&self->factory);
-
g_clear_pointer (&self->items, gtk_rb_tree_unref);
G_OBJECT_CLASS (gtk_list_item_manager_parent_class)->dispose (object);
{
}
-void
-gtk_list_item_manager_set_factory (GtkListItemManager *self,
- GtkListItemFactory *factory)
-{
- guint n_items;
- GSList *l;
-
- g_return_if_fail (GTK_IS_LIST_ITEM_MANAGER (self));
- g_return_if_fail (factory == NULL || GTK_IS_LIST_ITEM_FACTORY (factory));
-
- if (self->factory == factory)
- return;
-
- n_items = self->model ? g_list_model_get_n_items (G_LIST_MODEL (self->model)) : 0;
- gtk_list_item_manager_remove_items (self, NULL, 0, n_items);
-
- g_set_object (&self->factory, factory);
-
- gtk_list_item_manager_add_items (self, 0, n_items);
-
- gtk_list_item_manager_ensure_items (self, NULL, G_MAXUINT);
-
- for (l = self->trackers; l; l = l->next)
- {
- GtkListItemTracker *tracker = l->data;
- GtkListTile *tile;
-
- if (tracker->widget == NULL)
- continue;
-
- tile = gtk_list_item_manager_get_nth (self, tracker->position, NULL);
- g_assert (tile);
- tracker->widget = GTK_LIST_ITEM_BASE (tile->widget);
- }
-}
-
-GtkListItemFactory *
-gtk_list_item_manager_get_factory (GtkListItemManager *self)
-{
- g_return_val_if_fail (GTK_IS_LIST_ITEM_MANAGER (self), NULL);
-
- return self->factory;
-}
-
void
gtk_list_item_manager_set_model (GtkListItemManager *self,
GtkSelectionModel *model)
GtkListTile * gtk_list_tile_gc (GtkListItemManager *self,
GtkListTile *tile);
-void gtk_list_item_manager_set_factory (GtkListItemManager *self,
- GtkListItemFactory *factory);
-GtkListItemFactory * gtk_list_item_manager_get_factory (GtkListItemManager *self);
void gtk_list_item_manager_set_model (GtkListItemManager *self,
GtkSelectionModel *model);
GtkSelectionModel * gtk_list_item_manager_get_model (GtkListItemManager *self);
GtkListView *self = GTK_LIST_VIEW (base);
GtkWidget *result;
- result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager),
+ result = gtk_list_item_widget_new (self->factory,
"row",
GTK_ACCESSIBLE_ROLE_LIST_ITEM);
switch (property_id)
{
case PROP_FACTORY:
- g_value_set_object (value, gtk_list_item_manager_get_factory (self->item_manager));
+ g_value_set_object (value, self->factory);
break;
case PROP_MODEL:
{
g_return_val_if_fail (GTK_IS_LIST_VIEW (self), NULL);
- return gtk_list_item_manager_get_factory (self->item_manager);
+ return self->factory;
}
/**
gtk_list_view_set_factory (GtkListView *self,
GtkListItemFactory *factory)
{
+ GtkListTile *tile;
+
g_return_if_fail (GTK_IS_LIST_VIEW (self));
g_return_if_fail (factory == NULL || GTK_IS_LIST_ITEM_FACTORY (factory));
- if (factory == gtk_list_item_manager_get_factory (self->item_manager))
+ if (!g_set_object (&self->factory, factory))
return;
- gtk_list_item_manager_set_factory (self->item_manager, factory);
+ for (tile = gtk_list_item_manager_get_first (self->item_manager);
+ tile != NULL;
+ tile = gtk_rb_tree_node_get_next (tile))
+ {
+ if (tile->widget)
+ gtk_list_item_widget_set_factory (GTK_LIST_ITEM_WIDGET (tile->widget), factory);
+ }
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]);
}
GtkListBase parent_instance;
GtkListItemManager *item_manager;
+ GtkListItemFactory *factory;
gboolean show_separators;
gboolean single_click_activate;
};